One thing new that I’ve learned today is that in Magic Leap One, the virtual object won’t cast shadows.
Take a look at this video by SawnVR and look carefully at the dinosaur when it is placed on the table (0:48). Do you notice something strange? There are no shadows at all.
If you look at the official documentation in the Art & Animation
section under the Lighting
section, it reads:
“Objects won’t cast shadows, so consider building unit objects, or lighting your objects from above to make the absence of shadow less noticeable.”
Self-shadowing is possible. So what is “self-shadowing”. According to Wikipedia:
“Self-Shadowing is a computer graphics lighting effect, used in 3D rendering applications such as computer animation and video games. Self-shadowing allows non-static objects in the environment, such as game characters and interactive objects (buckets, chairs, etc.), to cast shadows on themselves and each other. “
So if a character has a left arm and it is position on top of a right arm, if the lighting is above the character, you would see a shadow on the right arm.
Magic Leap also wrote in their documentation (source):
“Shadows are typically a great way of accomplishing this, but when working in an additive light medium, darkening things isn’t really an option.”
Shadows add another layer of realism and depth to the mixed reality scene and provide important visual depth cues. this is the way to make augmented objects appear like they are an integrated part of the environment real physical environment (Magic Leap talks about it in the “Grounding digital objects on real surfaces” section). With shadows, you can tell how much above a surface, how far or close an object is in relative to other objects. Without shadows, an object might appear floating above a surface when viewed from certain angles. Objects might appear aligned on the same horizontal or vertical plane, whether with shadows, you will be able to nice that they are actually far away from each other. In some scene, it gives a clear visual cue of the size of the object relative to the scene or other objects.
The reason why you are able to perceive the dinosaur as a small one is due to the angle on which you observe the scene and the virtual dinosaur size relatively to real-world objects around it.
In the official documentation, Magic Leap recommends two solutions. The first one is to build unlit objects, and the second one is lighting your objects from above, which will make the absence of shadows less noticeable.
To be honest, until I’ve read about the absence of object shadows, I haven’t noticed that there were no shadows. However, I don’t have the Magic Leap One myself, and if I had to use it, I think I would have noticed it.
Now, coming from shadow casting is nothing new and it’s used in many apps. In fact, it’s very important in certain apps and I just can’t see myself enjoying some experienced without it. I talked about that topic in my Enhancing Perception of Depth article.
I remember going out to review the game W.AR Augmented Reality and paying a great deal of attention to the shadow. The shadow helps create a unique atmosphere that the game just wouldn’t feel the same without it.

Honestly, I just can’t imagine how that game or other games would feel without it, but it will definitely not be the same.
Here is another example, me playing AR Block Tower AR game for iOS.

This is another topic that I am interested to dive my head into. If what I think is true and indeed we won’t have any way to have objects cast shadows, it might have a negative effect for some Mixed Reality experiences. I want to see how those alternative solutions work in practice before making my decision whether it’s a big issue or something that developers can find alternative solutions for.
Update: shadows can be faked using a technique called Negative Shadows (thanks @Aidan_Wolf for directing me to that information). You can read more about it here on adreasjaki.com.
I’ve read the article about the Negative Shadows and was blown away how effective it is. In a nutshell, you create a texture on a sprite and place it below the object you want the shadow to be cast. Then you apply an outer glow effect, which creates a gradual contrast difference between the area where the sprite is located and its surrounding area, giving the effect of a shadow underneath the virtual object.
I tried replicating this effect myself using “outer glow” in image editing program. Here is the result.
This works beautifully for static objects and I am still interested to see how developers can use this technique to make it work for animated objects.